/*实现一个函数 mostFrequent(arr)，它接收一个数组，返回出现次数最多的元素和它出现的次数。
mostFrequent([1, 2, 3, 2, 2, 4, 4, 4, 4, 5])
// 输出：{ value: 4, count: 4 }
✍️ 要求：
不使用现成的库；

要能处理任意数组（字符串、数字都可以）；

返回值为对象格式，例如：{ value: 元素值, count: 出现次数 }
*/
// 算法复杂度 O(n) 空间复杂度 O(n)
// 思路：使用 Map 数据结构来存储每个元素及其出现的次数，遍历数组时更新 Map 中的计数，最后找到计数最多的元素。
function mostFrequent(arr) {
    let map = new Map();
    let maxCount = 0;
    let mostFrequentItem = null;
  arr.forEach(item => {
    if(map.has(item)){
      // map.get(item) + 1 的意思是：
      // 先通过 map.get(item) 取出当前 item 在 Map 中已经记录的出现次数，然后加 1，表示该元素又出现了一次。
        map.set(item, (map.get(item) || 0) + 1);
    }else{
        map.set(item, 1);
    }
  });
  map.forEach((count, item) => {
    if(count > maxCount){
        maxCount = count;
        mostFrequentItem = item;
    }
  });
  return { value: mostFrequentItem, count: maxCount };
}
   